/**
 * typedef 自定义类型 https://www.bilibili.com/video/BV1vs411n7TH?p=111
 * 1.为已存在的类型起别名:
 *     1.与#define 不同, typedef 仅限于'数据类型', 而不是表达式or具体的值.
 *     2.#define 发生在预处理, #typedef 发生在编译阶段.
 * 2.定义函数指针
 */
#include <stdio.h>

struct Student;     //从外部导入


typedef unsigned int size_t;    //系统
typedef size_t       ui;


typedef struct {        //定义结构体 & 给这个结构体起别名
    char* key;
    char* value;
} Entity;
typedef struct Student student;  //这样定义也可以

void typedef_alias();
void function_pointer();

int main() {
    //1.起别名
    typedef_alias();
    //2.函数指针
    function_pointer();
    return 0;
}

//1.起别名 alias [ˈeɪliəs] n.别名; (尤指罪犯所用的)化名; (文件、互联网地址等用的)假名;
void typedef_alias() {
    Entity entity = {"key1", "value1"};
    size_t a = 5;
    ui b = 6;
    printf("entity = {%s, %s}, a = %u, b = %u\n", entity.key, entity.value, a, b);
}

//2.函数指针
void function_pointer() {
    //FIXME 还未讲
}